{{tag>BROUILLON}}
----

====== C# ======

C# (CSharp) est un langage de programmation orientée objet, développé par Microsoft pour la plateforme .NET, dérivé de C, C++ et proche du Java.

===== Pré-requis =====

  * Disposer des [[:sudo|droits d'administration]].
  * Disposer d'une connexion à Internet configurée et activée.

===== Installation de .NET =====

Il est possible d'installer:
  * .NET avec seulement le Runtime pour exécuter des applications.
  * .NET SDK nécessaire pour développer, et intégrant le Runtime.

Dans chaque cas, suivre cette [[https://learn.microsoft.com/fr-FR/dotnet/core/install/linux-ubuntu|documentation]].

<note info>.NET 6 est inclus dans les dépôts Ubuntu 22.04 et 22.10</note>

Pour vérifier la version du SDK installée, exécuter dans un [[https://doc.ubuntu-fr.org/terminal|terminal]]:
<code>dotnet --list-sdks</code>
Le résultat doit être similaire à:
<code>6.0.406 [/usr/share/dotnet/sdk]</code>
Pour vérifier la version du runtime installée:
<code>dotnet --list-runtimes</code>
Le résultat doit être similaire à:
<code>Microsoft.AspNetCore.App 6.0.14 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.14 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
</code>

===== Outils pour le développement =====

Un projet .NET est composé d'une multitude de fichiers. Il est donc conseillé d'utiliser un IDE tel que [[https://www.jetbrains.com/rider/|JetBrains Rider]] (propriétaire et payant), ou un éditeur avancé tel que [[https://code.visualstudio.com/|Visual Studio Code]], libre et gratuit.

===== Création d'une application console .NET sans IDE =====

  - Créer un dossier ''TestHelloWorld'' dans le dossier utilisateur.
  - Ouvrir un [[https://doc.ubuntu-fr.org/terminal|terminal]] et se placer dans ce dossier.
  - Exécuter la commande:
<code>dotnet new console --use-program-main</code>
Plusieurs fichiers vont être créés dont le fichier:
<file cpp Program.cs>
namespace TestHelloWorld;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}
</file>
Pour lancer l'application, exécuter la commande:
<code>dotnet run</code>
Résultat:
<code>Hello, World!</code>

===== Création d'une application avec IHM dans Visual Studio Code =====

Pré-requis:
  * Pour développer en C#, il faut installer l'[[https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp|extension C#]] (normalement, l'éditeur propose de l'installer dès qu'on ouvre un fichier C#). Pour installer des extensions dans Visual Studio Code, consulter cette [[https://code.visualstudio.com/docs/editor/extension-marketplace|documentation]].
  * Pour créer une IHM, il faut utiliser un framework tel que [[https://learn.microsoft.com/fr-FR/dotnet/maui/what-is-maui?view=net-maui-7.0|MAUI]] (pour Linux, développé par la communauté), [[https://platform.uno/|Uno]], [[https://avaloniaui.net/|AvaloniaUI]] ou [[https://github.com/GtkSharp/GtkSharp|GtkSharp]]. Dans l'exemple suivant, nous utiliserons GtkSharp.
Procéder ainsi:\\
  * Dans le terminal intégré de Visual Studio Code, exécuter cette commande pour installer le template:
<code>dotnet new --install GtkSharp.Template.CSharp</code>
  * Vérifier que le template est bien installé:
<code>dotnet new --list | grep gtkapp</code>
Le résultat doit être:
<code>Gtk Application             gtkapp          [C#]        Gtk/GUI App</code>
  * Choisir ''Ouvrir un dossier'' et, dans la fenêtre de dialogue, créer un dossier ''TestGUI'' puis l'ouvrir. Ce nom de dossier deviendra le nom et l'espace de noms du projet.
  * Dans le terminal intégré de Visual Studio Code, exécuter cette commande:
<code>dotnet new gtkapp</code>
Plusieurs fichiers vont se créer, dont ''MainWindow.glade'', qui est le fichier de description du formulaire, que l'on peut modifier avec [[:glade|Glade]]. Le fichier ''MainWindow.cs'' montre comment intégrer un fichier ''.glade'' dans un projet et comment gérer les événements:
<file cpp MainWindow.cs>
using System;
using Gtk;
using UI = Gtk.Builder.ObjectAttribute;

namespace TestGUI
{
    class MainWindow : Window
    {
        [UI] private Label _label1 = null;
        [UI] private Button _button1 = null;

        private int _counter;

        public MainWindow() : this(new Builder("MainWindow.glade")) { }

        private MainWindow(Builder builder) : base(builder.GetRawOwnedObject("MainWindow"))
        {
            builder.Autoconnect(this);

            DeleteEvent += Window_DeleteEvent;
            _button1.Clicked += Button1_Clicked;
        }

        private void Window_DeleteEvent(object sender, DeleteEventArgs a)
        {
            Application.Quit();
        }

        private void Button1_Clicked(object sender, EventArgs a)
        {
            _counter++;
            _label1.Text = "Hello World! This button has been clicked " + _counter + " time(s).";
        }
    }
}
</file>
Pour lancer l'application, exécuter la commande:
<code>dotnet run</code>
Le résultat sera une fenêtre avec le texte ''Hello World!'' au centre et un bouton ''Click me!'' en bas.

===== Publication =====
Pour le déploiement d'une application, .NET, permet de publier une version autonome incluant le runtime .NET ou une version plus légère sans le runtime (dans ce cas, l'utilisateur devra installer le runtime sur son PC).

Pour plus d'informations, consulter [[https://learn.microsoft.com/fr-FR/dotnet/core/deploying/|cette page]].

===== Voir aussi =====

  * [[https://learn.microsoft.com/fr-FR/dotnet/csharp/|Documentation Microsoft C#]]
  * [[https://learn.microsoft.com/fr-FR/dotnet/fundamentals/|Documentation Microsoft .NET]]
  * [[http://www.csharphelp.com/|C# Help]]
  * [[https://www.c-sharpcorner.com/|C# Corner]]

----
//Contributeurs principaux : [[:utilisateurs:rafbor]].//